using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataSecurity.StandartInterfaces;

namespace DataSecurity
{
    /// <summary>
    /// Abstract factory interface. Creates data access objects.
    /// </summary>
    /// <remarks>
    /// GoF Design Pattern: Factory.
    /// </remarks>
    public interface IDaoFactory
    {
        /// <summary>
        /// Gets the site.
        /// </summary>
        /// <value>
        /// The site.
        /// </value>
        ISite Site { get; }

        /// <summary>
        /// Gets the permission.
        /// </summary>
        /// <value>
        /// The permission.
        /// </value>
        IPermission Permission { get; }

        /// <summary>
        /// Gets the role.
        /// </summary>
        /// <value>
        /// The role.
        /// </value>
        IRole Role { get; }

        IRoleInSite RoleInSite { get; }

        /// <summary>
        /// Gets the permission in site.
        /// </summary>
        /// <value>
        /// The permission in site.
        /// </value>
        IPermissionInSite PermissionInSite { get; }

        /// <summary>
        /// Gets the user.
        /// </summary>
        /// <value>
        /// The user.
        /// </value>
        IUser User { get; }
    }
}
